package leetcode8;

public class test40 {
    /**
     * 98. 验证二叉搜索树
     */
    // 最小值初始化为中序序列的第一个节点值
    Integer pre;
    public boolean isValidBST(TreeNode root) {
        // 结束条件：如果root为null，返回true。
        // 因为空的二叉搜索树也是符合条件的
        if (root == null) return true;
        // 中序遍历：左根右
        // 递归左子树，获取结果
        boolean left = isValidBST(root.left);
        // 如果当前节点的值大于等于中序序列中上一个值，证明不是二叉搜索树
        // 如果pre为null，证明pre还没有初始化所以首先将pre初始化
        if (pre != null && root.val <= pre){
            return false;
        }
        // 如果当前节点小于中序序列上一个值，证明符合条件，更新pre为
        // 当前值，继续判断下一个值，
        pre = root.val;
        // 递归右子树，获取结果
        boolean right = isValidBST(root.right);
        //    左右子树都是二叉搜索树，则返回true，否则返回false
        return left && right;
    }
}
